"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/6/11 14:10
@Description :  设计工具类  简化pymysql的操作
1. 获取连接
2. 释放资源
3. 增删改

"""
import pymysql
from dbutils.pooled_db import PooledDB
from pymysql.cursors import DictCursor


class DBHelper:
    def __init__(self, auto=False, cursor=DictCursor):
        # 初始化一个连接池
        self.db_pool = PooledDB(
            host='127.0.0.1',
            port=3306,
            user='root',
            passwd='root',
            db='python2512',
            charset='utf8mb4',
            autocommit=auto,
            cursorclass=cursor,
            creator=pymysql,  # 连接数据库的模块
            maxconnections=5,  # 通常允许的最大连接数（默认值 0 或 None 表示任意数量的连接）
            mincached=2,  # 池中空闲连接的初始数量（默认值 0 表示启动时不建立任何连接）
            maxcached=3,  # 池中的最大空闲连接数（默认值 0 或 None 表示池大小不受限制）
            blocking=True  # 确定超过最大值时的行为（如果设置为 true，则阻止并等待，直到连接数减少，但默认情况下会报错）
        )

    # 获取连接
    def get_connection_curse(self):
        conn = self.db_pool.connection()
        cur = conn.cursor()
        return conn, cur

        # 释放资源

    def close_all(self, *args):
        for arg in args:
            arg.close()

    # 增删改
    def execute_update(self, sql, **kwargs):
        conn, cur = self.get_connection_curse()
        rows = cur.execute(sql, kwargs)
        self.close_all(conn, cur)
        return rows

    # 查询
    def execute_select(self, sql, **kwargs):
        conn, cur = self.get_connection_curse()
        # {"id":1}
        rows = cur.execute(sql, kwargs)
        datas = cur.fetchall()
        self.close_all(conn, cur)
        return datas


if __name__ == '__main__':
    db = DBHelper(auto=True)
    str_sql = 'select * from user'
    rows = db.execute_select(str_sql)
    for row in rows:
        print(row)
